/*
 * @Author: your name
 * @Date: 2021-04-09 17:35:10
 * @LastEditTime: 2021-04-09 17:43:37
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: \TypeScript\16交叉类型.ts
 */
// TypeScript的高级类型
// 交叉类型 Intersection Types
// 交叉类型是将多个类型合并为一个类型
// 这让我们可以把现有的多种类型叠加到一起成为一种类型，
// 它包含了所需要的所有类型的特性
// 例如，Person & Serializable & Loggable 同时是 Person 和 Serizlizable 和 Loggable
// 就是说这个类型的对象同时拥有了这三种类型的成员
function extend(first, second) {
    var result = {};
    for (var id in first) {
        result[id] = first[id];
    }
    for (var id in second) {
        if (!result.hasOwnProperty(id)) {
            result[id] = second[id];
        }
    }
    return result;
}
var Person = /** @class */ (function () {
    function Person(name) {
        this.name = name;
    }
    return Person;
}());
var ConsoleLogger = /** @class */ (function () {
    function ConsoleLogger() {
    }
    ConsoleLogger.prototype.log = function () { };
    return ConsoleLogger;
}());
var jim = extend(new Person("jim"), new ConsoleLogger());
var n = jim.name;
jim.log();
